/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ifconnect.view.managedBean;

import ifconnect.model.dao.DisciplinaDao;
import ifconnect.model.dao.UsuarioDao;
import ifconnect.model.entity.Disciplina;
import ifconnect.model.entity.Usuario;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author Fidélis
 */
@ManagedBean(name = "gerenciarProfessorMB")
@ViewScoped
public class GerenciarProfessorMB {

    private UsuarioDao usuarioDao;
    private DisciplinaDao disciplinaDao;
    private List<Usuario> listaProfessores;
    private Usuario usuarioSelecionado;
    private List<Disciplina> disciplinas;
    private List<String> disciplinasSelecionadas;
    private List<Disciplina> disciplinasProfessor;

    /** Creates a new instance of GerenciarProfessorMB */
    public GerenciarProfessorMB() {
        this.usuarioDao = new UsuarioDao();
        this.disciplinaDao = new DisciplinaDao();

        this.listarDisciplinas();
        this.listarProfessores();
    }

    public List<Usuario> getListaProfessores() {
        return listaProfessores;
    }

    public void setListaProfessores(List<Usuario> listaProfessores) {
        this.listaProfessores = listaProfessores;
    }

    public Usuario getUsuarioSelecionado() {
        return usuarioSelecionado;
    }

    public void setUsuarioSelecionado(Usuario usuarioSelecionado) {
        this.usuarioSelecionado = usuarioSelecionado;
    }


    public List<Disciplina> getDisciplinas() {
        return disciplinas;
    }

    public void setDisciplinas(List<Disciplina> disciplinas) {
        this.disciplinas = disciplinas;
    }

    public List<String> getDisciplinasSelecionadas() {
        return disciplinasSelecionadas;
    }

    public void setDisciplinasSelecionadas(List<String> disciplinasSelecionadas) {
        this.disciplinasSelecionadas = disciplinasSelecionadas;
    }

    public List<Disciplina> getDisciplinasProfessor() {
        disciplinasProfessor = this.disciplinaDao.listarPorProfessor(usuarioSelecionado);
        return disciplinasProfessor;
    }

    public void setDisciplinasProfessor(List<Disciplina> disciplinasProfessor) {
        this.disciplinasProfessor = disciplinasProfessor;
    }

    

    public void atualizarDisciplinasProfessor() {
        List<Disciplina> disciplinasPf = this.disciplinaDao.listarPorProfessor(usuarioSelecionado);
        if (!disciplinasPf.isEmpty()) {
            for (Iterator<Disciplina> it = disciplinasPf.iterator(); it.hasNext();) {
                Disciplina disciplina = it.next();
                disciplina.setProfessor(null);
                this.disciplinaDao.atualizar(disciplina);
            }
        }
        for (Iterator<String> it = disciplinasSelecionadas.iterator(); it.hasNext();) {
            String sid = it.next();
            Long id = new Long(sid);
            for (Iterator<Disciplina> it1 = disciplinas.iterator(); it1.hasNext();) {
                Disciplina disciplina = it1.next();
                if (disciplina.getId().equals(id)) {
                    disciplina.setProfessor(usuarioSelecionado);
                    this.disciplinaDao.atualizar(disciplina);
                }
            }

        }
        this.disciplinas = null;
        this.listarDisciplinas();

        FacesMessage message = new FacesMessage("Disciplinas selecionadas com sucesso!");
        message.setSeverity(FacesMessage.SEVERITY_INFO);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }

    private void listarProfessores() {
        if (this.listaProfessores == null) {
            this.listaProfessores = this.usuarioDao.getProfessores();
        }
    }

    private void listarDisciplinas() {
        if (this.disciplinas == null) {
            this.disciplinas = this.disciplinaDao.listar();

        }
    }
}
